import modules.scripts
from modules import sd_samplers
from modules.generation_parameters_copypaste import create_override_settings_dict
from modules.processing import StableDiffusionProcessing, Processed, StableDiffusionProcessingTxt2Img, \
    StableDiffusionProcessingImg2Img, process_images
from modules.shared import opts, cmd_opts
import modules.shared as shared
import modules.processing as processing
from modules.ui import plaintext_to_html

 
def txt2img(id_task: str, prompt: str, negative_prompt: str, prompt_styles, steps: int, sampler_index: int,
            restore_faces: bool, tiling: bool, n_iter: int, batch_size: int, cfg_scale: float, seed: int, subseed: int,
            subseed_strength: float, seed_resize_from_h: int, seed_resize_from_w: int, seed_enable_extras: bool,
            height: int, width: int, enable_hr: bool, denoising_strength: float, hr_scale: float, hr_upscaler: str,
            hr_second_pass_steps: int, hr_resize_x: int, hr_resize_y: int, override_settings_texts, **kwargs):

    override_settings = create_override_settings_dict(override_settings_texts)
 
    p = StableDiffusionProcessingTxt2Img(
        sd_model=shared.sd_model,
        outpath_samples=opts.outdir_samples or opts.outdir_txt2img_samples,
        outpath_grids=opts.outdir_grids or opts.outdir_txt2img_grids,
        prompt=prompt,
        styles=prompt_styles,
        negative_prompt=negative_prompt,
        seed=seed,
        subseed=subseed,
        subseed_strength=subseed_strength,
        seed_resize_from_h=seed_resize_from_h,
        seed_resize_from_w=seed_resize_from_w,
        seed_enable_extras=seed_enable_extras,
        sampler_name=sd_samplers.samplers[sampler_index].name,
        batch_size=batch_size,
        n_iter=n_iter,
        steps=steps,
        cfg_scale=cfg_scale,
        width=width,
        height=height,
        restore_faces=restore_faces,
        tiling=tiling,
        enable_hr=enable_hr,
        denoising_strength=denoising_strength if enable_hr else None,
        hr_scale=hr_scale,
        hr_upscaler=hr_upscaler,
        hr_second_pass_steps=hr_second_pass_steps,
        hr_resize_x=hr_resize_x,
        hr_resize_y=hr_resize_y,
        override_settings=override_settings,
    )
    activate=kwargs['activate']
    split_ratio=kwargs['split_ratio']
    base_ratio=kwargs['base_ratio']
    use_base=kwargs['use_base']
    use_common=kwargs['use_common']
    
    process_args=(activate,False,'Matrix','Columns','Mask','Prompt',split_ratio,base_ratio,use_base,use_common,False,'Attention',[False],0,0,0.4,None,0,0,False)

    p.scripts = modules.scripts.scripts_txt2img
    p.script_args = process_args
 
    if cmd_opts.enable_console_prompts:
        print(f"\ntxt2img: {prompt}", file=shared.progress_print_out)
    
   
    #activate: True a_debug: False rp_selected_tab: Matrix mmode: Columns xmode: Mask pmode: Prompt aratios: 1,1 
    # bratios: 0.5 usebase: True usecom: False usencom: False calcmode: Attention options: [False] lnter: 0 lnur: 0 threshold: 0.4 
    # polymask: None lstop: 0 lstop_hr: 0 flipper: False
    processed = modules.scripts.scripts_txt2img.run(p,*process_args)
    #     processed = None
 
    if processed is None:
        processed = process_images(p)
 
    p.close()
 
    shared.total_tqdm.clear()
 
    generation_info_js = processed.js()
    if opts.samples_log_stdout:
        print(generation_info_js)
 
    if opts.do_not_show_images:
        processed.images = []
 
    return processed.images, generation_info_js, plaintext_to_html(processed.info), plaintext_to_html(
        processed.comments)